package com.tcp;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 1. TCP 服务器端
 */
public class SocketTCP03Client {

    public static void main(String[] args) throws IOException {
        // 1. 链接本机中 9999 端口的应用程序,如果链接成功，那么返回 socket对象
        System.out.println("InetAddress.getLocalHost()＝" +InetAddress.getLocalHost());
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("客户端 socket = " + socket.getClass());

        // 2.连接服务器成功之后，发送数据, 要求使用字符流发送数据
        OutputStream outputStream = socket.getOutputStream();
        // 2.1 将字节输出流，转换成字符输出流
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
        // 2.2
        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
        bufferedWriter.write("hello server 字符流");
        bufferedWriter.newLine(); // 设置结束符
        bufferedWriter.flush();// 如果使用字符流发送数据的话，那么需要我们手动的刷新，否则数据不会写入到通道中
        System.out.println("客户端数据发送完毕.......");


        // 3. 读取 服务器端发送的数据
        InputStream inputStream = socket.getInputStream();
        // 3.1 将字节输入流，转换成 字符输入流
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String s = bufferedReader.readLine();
        System.out.println(s);


        // 4.发送数据之后，必须关闭流，以及 socket
        bufferedReader.close(); // 使用字符流时，就不用关闭里面的流了，只需要关闭外层流就可以了
        bufferedWriter.close();
        socket.close();
        System.out.println("客户端退出了........");

    }
}
